import {publicApi} from 'ts-api-guardian';

// =================================================================================================
// =================================================================================================
// =========== S T O P   -  S T O P   -  S T O P   -  S T O P   -  S T O P   -  S T O P  ===========
// =================================================================================================
// =================================================================================================
//
// DO NOT EDIT THIS LIST OF PUBLIC APIS UNLESS YOU GET IT CLEARED BY: mhevery, vsavkin, or tbosch!
//
// =================================================================================================
// =================================================================================================

const CORE = [
  'AbstractProviderError',
  'AbstractProviderError.addKey(injector:Injector, key:Key):void',
  'AbstractProviderError.constructResolvingMessage:Function',
  'AbstractProviderError.constructor(injector:Injector, key:Key, constructResolvingMessage:Function)',
  'AbstractProviderError.context:any',
  'AbstractProviderError.injectors:Injector[]',
  'AbstractProviderError.keys:Key[]',
  'AbstractProviderError.message:string',
  'AfterContentChecked',
  'AfterContentChecked.ngAfterContentChecked():any',
  'AfterContentInit',
  'AfterContentInit.ngAfterContentInit():any',
  'AfterViewChecked',
  'AfterViewChecked.ngAfterViewChecked():any',
  'AfterViewInit',
  'AfterViewInit.ngAfterViewInit():any',
  'AppViewManager',
  'AppViewManager.attachViewInContainer(viewContainerLocation:ElementRef, index:number, viewRef:EmbeddedViewRef):EmbeddedViewRef',
  'AppViewManager.createEmbeddedViewInContainer(viewContainerLocation:ElementRef, index:number, templateRef:TemplateRef):EmbeddedViewRef',
  'AppViewManager.createHostViewInContainer(viewContainerLocation:ElementRef, index:number, hostViewFactoryRef:HostViewFactoryRef, dynamicallyCreatedProviders:ResolvedProvider[], projectableNodes:any[][]):HostViewRef',
  'AppViewManager.createRootHostView(hostViewFactoryRef:HostViewFactoryRef, overrideSelector:string, injector:Injector, projectableNodes:any[][]):HostViewRef',
  'AppViewManager.destroyRootHostView(hostViewRef:HostViewRef):any',
  'AppViewManager.destroyViewInContainer(viewContainerLocation:ElementRef, index:number):any',
  'AppViewManager.detachViewInContainer(viewContainerLocation:ElementRef, index:number):EmbeddedViewRef',
  'AppViewManager.getComponent(hostLocation:ElementRef):any',
  'AppViewManager.getHostElement(hostViewRef:HostViewRef):ElementRef',
  'AppViewManager.getNamedElementInComponentView(hostLocation:ElementRef, variableName:string):ElementRef',
  'AppViewManager.getViewContainer(location:ElementRef):ViewContainerRef',
  'ApplicationRef',
  'ApplicationRef.bootstrap(componentType:Type, providers:Array<Type|Provider|any[]>):Promise<ComponentRef>',
  'ApplicationRef.componentTypes:Type[]',
  'ApplicationRef.dispose():void',
  'ApplicationRef.injector:Injector',
  'ApplicationRef.registerBootstrapListener(listener:(ref: ComponentRef) => void):void',
  'ApplicationRef.registerDisposeListener(dispose:() => void):void',
  'ApplicationRef.tick():void',
  'ApplicationRef.zone:NgZone',
  'AttributeFactory',
  'AttributeMetadata',
  'AttributeMetadata.constructor(attributeName:string)',
  'AttributeMetadata.toString():string',
  'AttributeMetadata.token:AttributeMetadata',
  'Binding',
  'Binding.constructor(token:any, {toClass,toValue,toAlias,toFactory,deps,multi}:{toClass?:Type, toValue?:any, toAlias?:any, toFactory:Function, deps?:Object[], multi?:boolean})',
  'Binding.toAlias:any',
  'Binding.toClass:any',
  'Binding.toFactory:any',
  'Binding.toValue:any',
  'ChangeDetectionError',
  'ChangeDetectionError.constructor(exp:string, originalException:any, originalStack:any, context:any)',
  'ChangeDetectionError.location:string',
  'ChangeDetectionStrategy',
  'ChangeDetectionStrategy.CheckAlways',
  'ChangeDetectionStrategy.CheckOnce',
  'ChangeDetectionStrategy.Checked',
  'ChangeDetectionStrategy.Default',
  'ChangeDetectionStrategy.Detached',
  'ChangeDetectionStrategy.OnPush',
  'ChangeDetectorRef',
  'ChangeDetectorRef.checkNoChanges():void',
  'ChangeDetectorRef.detach():void',
  'ChangeDetectorRef.detectChanges():void',
  'ChangeDetectorRef.markForCheck():void',
  'ChangeDetectorRef.reattach():void',
  'Class(clsDef:ClassDefinition):ConcreteType',
  'ClassDefinition',
  'ClassDefinition.constructor:Function|any[]',
  'ClassDefinition.extends:Type',
  'CollectionChangeRecord',
  'CollectionChangeRecord.constructor(item:any, trackById:any)',
  'CollectionChangeRecord.currentIndex:number',
  'CollectionChangeRecord.previousIndex:number',
  'CollectionChangeRecord.toString():string',
  'Compiler',
  'Compiler.clearCache():any',
  'Compiler.compileInHost(componentType:Type):Promise<HostViewFactoryRef>',
  'ComponentDecorator',
  'ComponentDecorator.View(obj:{templateUrl?:string, template?:string, directives?:Array<Type|any[]>, pipes?:Array<Type|any[]>, renderer?:string, styles?:string[], styleUrls?:string[]}):ViewDecorator',
  'ComponentFactory',
  'ComponentMetadata',
  'ComponentMetadata.changeDetection:ChangeDetectionStrategy',
  'ComponentMetadata.constructor({selector,inputs,outputs,properties,events,host,exportAs,moduleId,bindings,providers,viewBindings,viewProviders,changeDetection=ChangeDetectionStrategy.Default,queries,templateUrl,template,styleUrls,styles,directives,pipes,encapsulation}:{selector?:string, inputs?:string[], outputs?:string[], properties?:string[], events?:string[], host?:{[key:string]:string}, bindings?:any[], providers?:any[], exportAs?:string, moduleId?:string, viewBindings?:any[], viewProviders?:any[], queries?:{[key:string]:any}, changeDetection?:ChangeDetectionStrategy, templateUrl?:string, template?:string, styleUrls?:string[], styles?:string[], directives?:Array<Type|any[]>, pipes?:Array<Type|any[]>, encapsulation?:ViewEncapsulation})',
  'ComponentMetadata.directives:Array<Type|any[]>',
  'ComponentMetadata.encapsulation:ViewEncapsulation',
  'ComponentMetadata.moduleId:string',
  'ComponentMetadata.pipes:Array<Type|any[]>',
  'ComponentMetadata.styleUrls:string[]',
  'ComponentMetadata.styles:string[]',
  'ComponentMetadata.template:string',
  'ComponentMetadata.templateUrl:string',
  'ComponentMetadata.viewBindings:any[]',
  'ComponentMetadata.viewProviders:any[]',
  'ComponentRef',
  'ComponentRef.componentType:Type',
  'ComponentRef.dispose():void',
  'ComponentRef.hostComponent:any',
  'ComponentRef.hostView:HostViewRef',
  'ComponentRef.injector:Injector',
  'ComponentRef.instance:any',
  'ComponentRef.location:ElementRef',
  'ConcreteType',
  'ContentChildFactory',
  'ContentChildMetadata',
  'ContentChildMetadata.constructor(_selector:Type|string)',
  'ContentChildrenFactory',
  'ContentChildrenMetadata',
  'ContentChildrenMetadata.constructor(_selector:Type|string, {descendants=false}:{descendants?:boolean})',
  'CyclicDependencyError',
  'CyclicDependencyError.constructor(injector:Injector, key:Key)',
  'DebugNode',
  'DebugNode.componentInstance:any',
  'DebugNode.constructor(nativeNode:any, parent:DebugNode)',
  'DebugNode.getLocal(name:string):any',
  'DebugNode.inject(token:any):any',
  'DebugNode.injector:Injector',
  'DebugNode.listeners:EventListener[]',
  'DebugNode.locals:Map<string, any>',
  'DebugNode.nativeNode:any',
  'DebugNode.parent:DebugElement',
  'DebugNode.providerTokens:any[]',
  'DebugNode.setDebugInfo(info:RenderDebugInfo):any',
  'DebugElement',
  'DebugElement.children:DebugElement[]',
  'DebugElement.nativeElement:any',
  'DebugElement.addChild(child:DebugNode):any',
  'DebugElement.attributes:Map<string, any>',
  'DebugElement.childNodes:DebugNode[]',
  'DebugElement.constructor(nativeNode:any, parent:any)',
  'DebugElement.insertChildrenAfter(child:DebugNode, newChildren:DebugNode[]):any',
  'DebugElement.name:string',
  'DebugElement.properties:Map<string, any>',
  'DebugElement.query(predicate:Predicate<DebugElement>):DebugElement',
  'DebugElement.queryAll(predicate:Predicate<DebugElement>):DebugElement[]',
  'DebugElement.queryAllNodes(predicate:Predicate<DebugNode>):DebugNode[]',
  'DebugElement.removeChild(child:DebugNode):any',
  'DebugElement.triggerEventHandler(eventName:string, eventObj:Event):any',
  'asNativeElements(debugEls:DebugElement[]):any',
  'Dependency',
  'Dependency.constructor(key:Key, optional:boolean, lowerBoundVisibility:any, upperBoundVisibility:any, properties:any[])',
  'Dependency.fromKey(key:Key):Dependency',
  'DependencyMetadata',
  'DependencyMetadata.token:any',
  'DirectiveDecorator',
  'DirectiveFactory',
  'DirectiveMetadata',
  'DirectiveMetadata.bindings:any[]',
  'DirectiveMetadata.constructor({selector,inputs,outputs,properties,events,host,bindings,providers,exportAs,queries}:{selector?:string, inputs?:string[], outputs?:string[], properties?:string[], events?:string[], host?:{[key:string]:string}, providers?:any[], bindings?:any[], exportAs?:string, queries?:{[key:string]:any}})',
  'DirectiveMetadata.events:string[]',
  'DirectiveMetadata.exportAs:string',
  'DirectiveMetadata.host:{[key:string]:string}',
  'DirectiveMetadata.inputs:string[]',
  'DirectiveMetadata.outputs:string[]',
  'DirectiveMetadata.properties:string[]',
  'DirectiveMetadata.providers:any[]',
  'DirectiveMetadata.queries:{[key:string]:any}',
  'DirectiveMetadata.selector:string',
  'DirectiveResolver',
  'DirectiveResolver.resolve(type:Type):DirectiveMetadata',
  'DoCheck',
  'DoCheck.ngDoCheck():any',
  'DynamicComponentLoader',
  'DynamicComponentLoader.loadAsRoot(type:Type, overrideSelector:string, injector:Injector, onDispose:() => void, projectableNodes:any[][]):Promise<ComponentRef>',
  'DynamicComponentLoader.loadIntoLocation(type:Type, hostLocation:ElementRef, anchorName:string, providers:ResolvedProvider[], projectableNodes:any[][]):Promise<ComponentRef>',
  'DynamicComponentLoader.loadNextToLocation(type:Type, location:ElementRef, providers:ResolvedProvider[], projectableNodes:any[][]):Promise<ComponentRef>',
  'ElementRef',
  'ElementRef.nativeElement:any',
  'EmbeddedViewRef',
  'EmbeddedViewRef.hasLocal(variableName:string):boolean',
  'EmbeddedViewRef.rootNodes:any[]',
  'EmbeddedViewRef.setLocal(variableName:string, value:any):void',
  'EventEmitter.constructor(isAsync:boolean)',
  'EventEmitter.emit(value:T):any',
  'EventEmitter.next(value:any):any',
  'EventEmitter.subscribe(generatorOrNext:any, error:any, complete:any):any',
  'EventEmitter<T>',
  'ExceptionHandler',
  'ExceptionHandler.call(exception:any, stackTrace:any, reason:string):void',
  'ExceptionHandler.constructor(_logger:any, _rethrowException:boolean)',
  'ExceptionHandler.exceptionToString(exception:any, stackTrace:any, reason:string):string',
  'ExpressionChangedAfterItHasBeenCheckedException',
  'ExpressionChangedAfterItHasBeenCheckedException.constructor(exp:string, oldValue:any, currValue:any, context:any)',
  'ForwardRefFn',
  'GetTestability',
  'GetTestability.addToWindow(registry:TestabilityRegistry):void',
  'GetTestability.findTestabilityInTree(registry:TestabilityRegistry, elem:any, findInAncestors:boolean):Testability',
  'HostBindingFactory',
  'HostBindingMetadata',
  'HostBindingMetadata.constructor(hostPropertyName:string)',
  'HostFactory',
  'HostListenerFactory',
  'HostListenerMetadata',
  'HostListenerMetadata.constructor(eventName:string, args:string[])',
  'HostMetadata',
  'HostMetadata.toString():string',
  'HostViewFactoryRef',
  'HostViewRef',
  'HostViewRef.rootNodes:any[]',
  'InjectFactory',
  'InjectMetadata',
  'InjectMetadata.constructor(token:any)',
  'InjectMetadata.toString():string',
  'InjectableFactory',
  'InjectableMetadata',
  'InjectableMetadata.constructor()',
  'Injector',
  'Injector.constructor(_proto:any, _parent:Injector, _isHostBoundary:boolean, _depProvider:any, _debugContext:Function)',
  'Injector.createChildFromResolved(providers:ResolvedProvider[]):Injector',
  'Injector.debugContext():any',
  'Injector.displayName:string',
  'Injector.fromResolvedBindings(providers:ResolvedProvider[]):Injector',
  'Injector.fromResolvedProviders(providers:ResolvedProvider[]):Injector',
  'Injector.get(token:any):any',
  'Injector.getAt(index:number):any',
  'Injector.getOptional(token:any):any',
  'Injector.hostBoundary:any',
  'Injector.instantiateResolved(provider:ResolvedProvider):any',
  'Injector.internalStrategy:any',
  'Injector.parent:Injector',
  'Injector.resolve(providers:Array<Type|Provider|any[]>):ResolvedProvider[]',
  'Injector.resolveAndCreate(providers:Array<Type|Provider|any[]>):Injector',
  'Injector.resolveAndCreateChild(providers:Array<Type|Provider|any[]>):Injector',
  'Injector.resolveAndInstantiate(provider:Type|Provider):any',
  'Injector.toString():string',
  'InputFactory',
  'InputMetadata',
  'InputMetadata.constructor(bindingPropertyName:string)',
  'InstantiationError',
  'InstantiationError.addKey(injector:Injector, key:Key):void',
  'InstantiationError.causeKey:Key',
  'InstantiationError.constructor(injector:Injector, originalException:any, originalStack:any, key:Key)',
  'InstantiationError.context:any',
  'InstantiationError.injectors:Injector[]',
  'InstantiationError.keys:Key[]',
  'InstantiationError.wrapperMessage:string',
  'InvalidProviderError',
  'InvalidProviderError.constructor(provider:any)',
  'IterableDiffer',
  'IterableDiffer.diff(object:any):any',
  'IterableDiffer.onDestroy():any',
  'IterableDifferFactory',
  'IterableDifferFactory.create(cdRef:ChangeDetectorRef, trackByFn:TrackByFn):IterableDiffer',
  'IterableDifferFactory.supports(objects:any):boolean',
  'IterableDiffers',
  'IterableDiffers.constructor(factories:IterableDifferFactory[])',
  'IterableDiffers.create(factories:IterableDifferFactory[], parent:IterableDiffers):IterableDiffers',
  'IterableDiffers.extend(factories:IterableDifferFactory[]):Provider',
  'IterableDiffers.find(iterable:any):IterableDifferFactory',
  'Key',
  'Key.constructor(token:Object, id:number)',
  'Key.displayName:string',
  'Key.get(token:Object):Key',
  'Key.numberOfKeys:number',
  'KeyValueChangeRecord',
  'KeyValueChangeRecord.constructor(key:any)',
  'KeyValueChangeRecord.currentValue:any',
  'KeyValueChangeRecord.previousValue:any',
  'KeyValueChangeRecord.toString():string',
  'KeyValueDiffer',
  'KeyValueDiffer.diff(object:any):any',
  'KeyValueDiffer.onDestroy():any',
  'KeyValueDifferFactory',
  'KeyValueDifferFactory.create(cdRef:ChangeDetectorRef):KeyValueDiffer',
  'KeyValueDifferFactory.supports(objects:any):boolean',
  'KeyValueDiffers',
  'KeyValueDiffers.constructor(factories:KeyValueDifferFactory[])',
  'KeyValueDiffers.create(factories:KeyValueDifferFactory[], parent:KeyValueDiffers):KeyValueDiffers',
  'KeyValueDiffers.extend(factories:KeyValueDifferFactory[]):Provider',
  'KeyValueDiffers.find(kv:Object):KeyValueDifferFactory',
  'NgZone',
  'NgZone.constructor({enableLongStackTrace=false}:any)',
  'NgZone.assertInAngularZone():void',
  'NgZone.assertNotInAngularZone():void',
  'NgZone.isInAngularZone():boolean',
  'NgZone.hasPendingMacrotasks:boolean',
  'NgZone.hasPendingMicrotasks:boolean',
  'NgZone.onError:EventEmitter<any>',
  'NgZone.onStable:EventEmitter<any>',
  'NgZone.onMicrotaskEmpty:EventEmitter<any>',
  'NgZone.onUnstable:EventEmitter<any>',
  'NgZone.run(fn:() => any):any',
  'NgZone.runOutsideAngular(fn:() => any):any',
  'NgZoneError',
  'NgZoneError.constructor(error:any, stackTrace:any)',
  'NoAnnotationError',
  'NoAnnotationError.constructor(typeOrFunc:any, params:any[][])',
  'NoProviderError',
  'NoProviderError.constructor(injector:Injector, key:Key)',
  'OnChanges',
  'OnChanges.ngOnChanges(changes:{[key:string]:SimpleChange}):any',
  'OnDestroy',
  'OnDestroy.ngOnDestroy():any',
  'OnInit',
  'OnInit.ngOnInit():any',
  'OpaqueToken',
  'OpaqueToken.constructor(_desc:string)',
  'OpaqueToken.toString():string',
  'OptionalFactory',
  'OptionalMetadata',
  'OptionalMetadata.toString():string',
  'OutOfBoundsError',
  'OutOfBoundsError.constructor(index:any)',
  'OutputFactory',
  'OutputMetadata',
  'OutputMetadata.constructor(bindingPropertyName:string)',
  'PipeFactory',
  'PipeMetadata',
  'PipeMetadata.constructor({name,pure}:{name:string, pure?:boolean})',
  'PipeMetadata.name:string',
  'PipeMetadata.pure:boolean',
  'PipeTransform',
  'PipeTransform.transform(value:any, args:any[]):any',
  'PlatformRef',
  'PlatformRef.application(providers:Array<Type|Provider|any[]>):ApplicationRef',
  'PlatformRef.asyncApplication(bindingFn:(zone: NgZone) => Promise<Array<Type | Provider | any[]>>, providers:Array<Type|Provider|any[]>):Promise<ApplicationRef>',
  'PlatformRef.dispose():void',
  'PlatformRef.injector:Injector',
  'PlatformRef.registerDisposeListener(dispose:() => void):void',
  'Provider',
  'Provider.constructor(token:any, {useClass,useValue,useExisting,useFactory,deps,multi}:{useClass?:Type, useValue?:any, useExisting?:any, useFactory?:Function, deps?:Object[], multi?:boolean})',
  'Provider.dependencies:Object[]',
  'Provider.multi:boolean',
  'Provider.token:any',
  'Provider.useClass:Type',
  'Provider.useExisting:any',
  'Provider.useFactory:Function',
  'Provider.useValue:any',
  'ProviderBuilder',
  'ProviderBuilder.constructor(token:any)',
  'ProviderBuilder.toAlias(aliasToken:any):Provider',
  'ProviderBuilder.toClass(type:Type):Provider',
  'ProviderBuilder.toFactory(factory:Function, dependencies:any[]):Provider',
  'ProviderBuilder.toValue(value:any):Provider',
  'QueryFactory',
  'QueryList.changes:Observable<any>',
  'QueryList.filter(fn:(item: T) => boolean):T[]',
  'QueryList.first:T',
  'QueryList.forEach(fn:(item: T) => void):void',
  'QueryList.last:T',
  'QueryList.length:number',
  'QueryList.map(fn:(item: T) => U):U[]',
  'QueryList.notifyOnChanges():void',
  'QueryList.reduce(fn:(acc: U, item: T) => U, init:U):U',
  'QueryList.reset(res:T[]):void',
  'QueryList.toArray():T[]',
  'QueryList.toString():string',
  'QueryList<T>',
  'QueryMetadata',
  'QueryMetadata.constructor(_selector:Type|string, {descendants=false,first=false}:{descendants?:boolean, first?:boolean})',
  'QueryMetadata.descendants:boolean',
  'QueryMetadata.first:boolean',
  'QueryMetadata.isVarBindingQuery:boolean',
  'QueryMetadata.isViewQuery:boolean',
  'QueryMetadata.selector:any',
  'QueryMetadata.toString():string',
  'QueryMetadata.varBindings:string[]',
  'ReflectionInfo',
  'ReflectionInfo.constructor(annotations:any[], parameters:any[][], factory:Function, interfaces:any[], propMetadata:{[key:string]:any[]})',
  'Reflector',
  'Reflector.annotations(typeOrFunc:any):any[]',
  'Reflector.constructor(reflectionCapabilities:PlatformReflectionCapabilities)',
  'Reflector.factory(type:Type):Function',
  'Reflector.getter(name:string):GetterFn',
  'Reflector.importUri(type:Type):string',
  'Reflector.interfaces(type:Type):any[]',
  'Reflector.isReflectionEnabled():boolean',
  'Reflector.listUnusedKeys():any[]',
  'Reflector.method(name:string):MethodFn',
  'Reflector.parameters(typeOrFunc:any):any[][]',
  'Reflector.propMetadata(typeOrFunc:any):{[key:string]:any[]}',
  'Reflector.reflectionCapabilities:PlatformReflectionCapabilities',
  'Reflector.registerFunction(func:Function, funcInfo:ReflectionInfo):void',
  'Reflector.registerGetters(getters:{[key:string]:GetterFn}):void',
  'Reflector.registerMethods(methods:{[key:string]:MethodFn}):void',
  'Reflector.registerSetters(setters:{[key:string]:SetterFn}):void',
  'Reflector.registerType(type:Type, typeInfo:ReflectionInfo):void',
  'Reflector.setter(name:string):SetterFn',
  'Reflector.trackUsage():void',
  'RenderComponentType',
  'RenderComponentType.constructor(id:string, encapsulation:ViewEncapsulation, styles:Array<string|any[]>)',
  'Renderer',
  'Renderer.attachViewAfter(node:any, viewRootNodes:any[]):any',
  'Renderer.createElement(parentElement:any, name:string):any',
  'Renderer.createTemplateAnchor(parentElement:any):any',
  'Renderer.createText(parentElement:any, value:string):any',
  'Renderer.createViewRoot(hostElement:any):any',
  'Renderer.destroyView(hostElement:any, viewAllNodes:any[]):any',
  'Renderer.detachView(viewRootNodes:any[]):any',
  'Renderer.invokeElementMethod(renderElement:any, methodName:string, args:any[]):any',
  'Renderer.listen(renderElement:any, name:string, callback:Function):Function',
  'Renderer.listenGlobal(target:string, name:string, callback:Function):Function',
  'Renderer.projectNodes(parentElement:any, nodes:any[]):any',
  'Renderer.renderComponent(componentType:RenderComponentType):Renderer',
  'Renderer.selectRootElement(selector:string):any',
  'Renderer.setBindingDebugInfo(renderElement:any, propertyName:string, propertyValue:string):any',
  'Renderer.setElementAttribute(renderElement:any, attributeName:string, attributeValue:string):any',
  'Renderer.setElementClass(renderElement:any, className:string, isAdd:boolean):any',
  'Renderer.setElementProperty(renderElement:any, propertyName:string, propertyValue:any):any',
  'Renderer.setElementStyle(renderElement:any, styleName:string, styleValue:string):any',
  'Renderer.setText(renderNode:any, text:string):any',
  'Renderer.setElementDebugInfo(renderElement:any, info:RenderDebugInfo):any',
  'ResolvedBinding',
  'ResolvedFactory',
  'ResolvedFactory.constructor(factory:Function, dependencies:Dependency[])',
  'ResolvedProvider',
  'ResolvedProvider.key:Key',
  'ResolvedProvider.multiProvider:boolean',
  'ResolvedProvider.resolvedFactories:ResolvedFactory[]',
  'RootRenderer',
  'RootRenderer.renderComponent(componentType:RenderComponentType):Renderer',
  'SelfFactory',
  'SelfMetadata',
  'SelfMetadata.toString():string',
  'SimpleChange',
  'SimpleChange.constructor(previousValue:any, currentValue:any)',
  'SimpleChange.isFirstChange():boolean',
  'SkipSelfFactory',
  'SkipSelfMetadata',
  'SkipSelfMetadata.toString():string',
  'TemplateRef',
  'TemplateRef.elementRef:ElementRef',
  'Testability',
  'Testability.constructor(_ngZone:NgZone)',
  'Testability.decreasePendingRequestCount():number',
  'Testability.findBindings(using:any, provider:string, exactMatch:boolean):any[]',
  'Testability.findProviders(using:any, provider:string, exactMatch:boolean):any[]',
  'Testability.getPendingRequestCount():number',
  'Testability.increasePendingRequestCount():number',
  'Testability.isStable():boolean',
  'Testability.whenStable(callback:Function):void',
  'TestabilityRegistry',
  'TestabilityRegistry.constructor()',
  'TestabilityRegistry.findTestabilityInTree(elem:Node, findInAncestors:boolean):Testability',
  'TestabilityRegistry.getAllTestabilities():Testability[]',
  'TestabilityRegistry.getAllRootElements():any[]',
  'TestabilityRegistry.getTestability(elem:any):Testability',
  'TestabilityRegistry.registerApplication(token:any, testability:Testability):any',
  'TrackByFn',
  'TypeDecorator',
  'TypeDecorator.Class(obj:ClassDefinition):ConcreteType',
  'TypeDecorator.annotations:any[]',
  'ViewChildFactory',
  'ViewChildMetadata',
  'ViewChildMetadata.constructor(_selector:Type|string)',
  'ViewChildrenFactory',
  'ViewChildrenMetadata',
  'ViewChildrenMetadata.constructor(_selector:Type|string)',
  'ViewContainerRef',
  'ViewContainerRef.clear():void',
  'ViewContainerRef.createEmbeddedView(templateRef:TemplateRef, index:number):EmbeddedViewRef',
  'ViewContainerRef.createHostView(hostViewFactoryRef:HostViewFactoryRef, index:number, dynamicallyCreatedProviders:ResolvedProvider[], projectableNodes:any[][]):HostViewRef',
  'ViewContainerRef.detach(index:number):EmbeddedViewRef',
  'ViewContainerRef.element:ElementRef',
  'ViewContainerRef.get(index:number):ViewRef',
  'ViewContainerRef.indexOf(viewRef:ViewRef):number',
  'ViewContainerRef.insert(viewRef:EmbeddedViewRef, index:number):EmbeddedViewRef',
  'ViewContainerRef.length:number',
  'ViewContainerRef.remove(index:number):void',
  'ViewDecorator',
  'ViewDecorator.View(obj:{templateUrl?:string, template?:string, directives?:Array<Type|any[]>, pipes?:Array<Type|any[]>, renderer?:string, styles?:string[], styleUrls?:string[]}):ViewDecorator',
  'ViewEncapsulation',
  'ViewEncapsulation.Emulated',
  'ViewEncapsulation.Native',
  'ViewEncapsulation.None',
  'ViewFactory',
  'ViewMetadata',
  'ViewMetadata.constructor({templateUrl,template,directives,pipes,encapsulation,styles,styleUrls}:{templateUrl?:string, template?:string, directives?:Array<Type|any[]>, pipes?:Array<Type|any[]>, encapsulation?:ViewEncapsulation, styles?:string[], styleUrls?:string[]})',
  'ViewMetadata.directives:Array<Type|any[]>',
  'ViewMetadata.encapsulation:ViewEncapsulation',
  'ViewMetadata.pipes:Array<Type|any[]>',
  'ViewMetadata.styleUrls:string[]',
  'ViewMetadata.styles:string[]',
  'ViewMetadata.template:string',
  'ViewMetadata.templateUrl:string',
  'ViewQueryMetadata',
  'ViewQueryMetadata.constructor(_selector:Type|string, {descendants=false,first=false}:{descendants?:boolean, first?:boolean})',
  'ViewQueryMetadata.isViewQuery:any',
  'ViewQueryMetadata.toString():string',
  'ViewRef',
  'ViewRef.changeDetectorRef:ChangeDetectorRef',
  'ViewRef.destroyed:boolean',
  'ViewResolver',
  'ViewResolver.resolve(component:Type):ViewMetadata',
  'WrappedException',
  'WrappedException.constructor(_wrapperMessage:string, _originalException:any, _originalStack:any, _context:any)',
  'WrappedException.context:any',
  'WrappedException.message:string',
  'WrappedException.originalException:any',
  'WrappedException.originalStack:any',
  'WrappedException.toString():string',
  'WrappedException.wrapperMessage:string',
  'WrappedException.wrapperStack:any',
  'WrappedValue',
  'WrappedValue.constructor(wrapped:any)',
  'WrappedValue.wrap(value:any):WrappedValue',
  'bind(token:any):ProviderBuilder',
  'const APPLICATION_COMMON_PROVIDERS:Array<Type|Provider|any[]>',
  'const APP_COMPONENT:OpaqueToken',
  'const APP_ID:OpaqueToken',
  'const APP_INITIALIZER:OpaqueToken',
  'const PACKAGE_ROOT_URL:OpaqueToken',
  'const PLATFORM_COMMON_PROVIDERS:Array<Type|Provider|any[]>',
  'const PLATFORM_DIRECTIVES:OpaqueToken',
  'const PLATFORM_INITIALIZER:OpaqueToken',
  'const PLATFORM_PIPES:OpaqueToken',
  'createNgZone():NgZone',
  'enableProdMode():any',
  'forwardRef(forwardRefFn:ForwardRefFn):Type',
  'platform(providers:Array<Type|Provider|any[]>):PlatformRef',
  'provide(token:any, {useClass,useValue,useExisting,useFactory,deps,multi}:{useClass?:Type, useValue?:any, useExisting?:any, useFactory?:Function, deps?:Object[], multi?:boolean}):Provider',
  'resolveForwardRef(type:any):any',
  'setTestabilityGetter(getter:GetTestability):void',
  'var Attribute:AttributeFactory',
  'var Component:ComponentFactory',
  'var ContentChild:ContentChildFactory',
  'var ContentChildren:ContentChildrenFactory',
  'var Directive:DirectiveFactory',
  'var Host:HostFactory',
  'var HostBinding:HostBindingFactory',
  'var HostListener:HostListenerFactory',
  'var Inject:InjectFactory',
  'var Injectable:InjectableFactory',
  'var Input:InputFactory',
  'var Optional:OptionalFactory',
  'var Output:OutputFactory',
  'var Pipe:PipeFactory',
  'var Query:QueryFactory',
  'var Self:SelfFactory',
  'var SkipSelf:SkipSelfFactory',
  'var Type:any',
  'var ViewChild:ViewChildFactory',
  'var ViewChildren:ViewChildrenFactory',
  'var ViewQuery:QueryFactory',
  'var reflector:any'
];

const COMMON = [
  'AbstractControl',
  'AbstractControl.constructor(validator:ValidatorFn, asyncValidator:AsyncValidatorFn)',
  'AbstractControl.dirty:boolean',
  'AbstractControl.errors:{[key:string]:any}',
  'AbstractControl.find(path:Array<string|number>|string):AbstractControl',
  'AbstractControl.getError(errorCode:string, path:string[]):any',
  'AbstractControl.hasError(errorCode:string, path:string[]):boolean',
  'AbstractControl.markAsDirty({onlySelf}:{onlySelf?:boolean}):void',
  'AbstractControl.markAsPending({onlySelf}:{onlySelf?:boolean}):void',
  'AbstractControl.markAsTouched():void',
  'AbstractControl.pending:boolean',
  'AbstractControl.pristine:boolean',
  'AbstractControl.setErrors(errors:{[key:string]:any}, {emitEvent}:{emitEvent?:boolean}):void',
  'AbstractControl.setParent(parent:ControlGroup|ControlArray):void',
  'AbstractControl.status:string',
  'AbstractControl.statusChanges:Observable<any>',
  'AbstractControl.touched:boolean',
  'AbstractControl.untouched:boolean',
  'AbstractControl.updateValueAndValidity({onlySelf,emitEvent}:{onlySelf?:boolean, emitEvent?:boolean}):void',
  'AbstractControl.valid:boolean',
  'AbstractControl.value:any',
  'AbstractControl.root:AbstractControl',
  'AbstractControl.valueChanges:Observable<any>',
  'AbstractControlDirective',
  'AbstractControlDirective.control:AbstractControl',
  'AbstractControlDirective.dirty:boolean',
  'AbstractControlDirective.errors:{[key:string]:any}',
  'AbstractControlDirective.path:string[]',
  'AbstractControlDirective.pristine:boolean',
  'AbstractControlDirective.touched:boolean',
  'AbstractControlDirective.untouched:boolean',
  'AbstractControlDirective.valid:boolean',
  'AbstractControlDirective.value:any',
  'AsyncPipe',
  'AsyncPipe.constructor(_ref:ChangeDetectorRef)',
  'AsyncPipe.ngOnDestroy():void',
  'AsyncPipe.transform(obj:Observable<any>|Promise<any>|EventEmitter<any>, args:any[]):any',
  'CheckboxControlValueAccessor',
  'CheckboxControlValueAccessor.constructor(_renderer:Renderer, _elementRef:ElementRef)',
  'CheckboxControlValueAccessor.onChange:any',
  'CheckboxControlValueAccessor.onTouched:any',
  'CheckboxControlValueAccessor.registerOnChange(fn:(_: any) => {}):void',
  'CheckboxControlValueAccessor.registerOnTouched(fn:() => {}):void',
  'CheckboxControlValueAccessor.writeValue(value:any):void',
  'Control',
  'Control.constructor(value:any, validator:ValidatorFn, asyncValidator:AsyncValidatorFn)',
  'Control.registerOnChange(fn:Function):void',
  'Control.updateValue(value:any, {onlySelf,emitEvent,emitModelToViewChange}:{onlySelf?:boolean, emitEvent?:boolean, emitModelToViewChange?:boolean}):void',
  'ControlArray',
  'ControlArray.at(index:number):AbstractControl',
  'ControlArray.constructor(controls:AbstractControl[], validator:ValidatorFn, asyncValidator:AsyncValidatorFn)',
  'ControlArray.insert(index:number, control:AbstractControl):void',
  'ControlArray.length:number',
  'ControlArray.push(control:AbstractControl):void',
  'ControlArray.removeAt(index:number):void',
  'ControlContainer',
  'ControlContainer.formDirective:Form',
  'ControlContainer.name:string',
  'ControlContainer.path:string[]',
  'ControlGroup',
  'ControlGroup.addControl(name:string, control:AbstractControl):void',
  'ControlGroup.constructor(controls:{[key:string]:AbstractControl}, optionals:{[key:string]:boolean}, validator:ValidatorFn, asyncValidator:AsyncValidatorFn)',
  'ControlGroup.contains(controlName:string):boolean',
  'ControlGroup.exclude(controlName:string):void',
  'ControlGroup.include(controlName:string):void',
  'ControlGroup.removeControl(name:string):void',
  'ControlValueAccessor',
  'ControlValueAccessor.registerOnChange(fn:any):void',
  'ControlValueAccessor.registerOnTouched(fn:any):void',
  'ControlValueAccessor.writeValue(obj:any):void',
  'CurrencyPipe',
  'CurrencyPipe.transform(value:any, args:any[]):string',
  'DatePipe',
  'DatePipe.supports(obj:any):boolean',
  'DatePipe.transform(value:any, args:any[]):string',
  'DecimalPipe',
  'DecimalPipe.transform(value:any, args:any[]):string',
  'DefaultValueAccessor',
  'DefaultValueAccessor.constructor(_renderer:Renderer, _elementRef:ElementRef)',
  'DefaultValueAccessor.onChange:any',
  'DefaultValueAccessor.onTouched:any',
  'DefaultValueAccessor.registerOnChange(fn:(_: any) => void):void',
  'DefaultValueAccessor.registerOnTouched(fn:() => void):void',
  'DefaultValueAccessor.writeValue(value:any):void',
  'Form',
  'Form.addControl(dir:NgControl):void',
  'Form.addControlGroup(dir:NgControlGroup):void',
  'Form.getControl(dir:NgControl):Control',
  'Form.getControlGroup(dir:NgControlGroup):ControlGroup',
  'Form.removeControl(dir:NgControl):void',
  'Form.removeControlGroup(dir:NgControlGroup):void',
  'Form.updateModel(dir:NgControl, value:any):void',
  'FormBuilder',
  'FormBuilder.array(controlsConfig:any[], validator:ValidatorFn, asyncValidator:AsyncValidatorFn):ControlArray',
  'FormBuilder.control(value:Object, validator:ValidatorFn, asyncValidator:AsyncValidatorFn):Control',
  'FormBuilder.group(controlsConfig:{[key:string]:any}, extra:{[key:string]:any}):ControlGroup',
  'I18nPluralPipe',
  'I18nPluralPipe.transform(value:number, args:any[]):string',
  'I18nSelectPipe',
  'I18nSelectPipe.transform(value:string, args:any[]):string',
  'JsonPipe',
  'JsonPipe.transform(value:any, args:any[]):string',
  'LowerCasePipe',
  'LowerCasePipe.transform(value:string, args:any[]):string',
  'MaxLengthValidator',
  'MaxLengthValidator.constructor(maxLength:string)',
  'MaxLengthValidator.validate(c:AbstractControl):{[key:string]:any}',
  'MinLengthValidator',
  'MinLengthValidator.constructor(minLength:string)',
  'MinLengthValidator.validate(c:AbstractControl):{[key:string]:any}',
  'NgClass',
  'NgClass.constructor(_iterableDiffers:IterableDiffers, _keyValueDiffers:KeyValueDiffers, _ngEl:ElementRef, _renderer:Renderer)',
  'NgClass.initialClasses=(v:string)',
  'NgClass.ngDoCheck():void',
  'NgClass.ngOnDestroy():void',
  'NgClass.rawClass=(v:string|string[]|Set<string>|{[key:string]:any})',
  'NgControl',
  'NgControl.asyncValidator:AsyncValidatorFn',
  'NgControl.name:string',
  'NgControl.validator:ValidatorFn',
  'NgControl.valueAccessor:ControlValueAccessor',
  'NgControl.viewToModelUpdate(newValue:any):void',
  'NgControlGroup',
  'NgControlGroup.asyncValidator:AsyncValidatorFn',
  'NgControlGroup.constructor(parent:ControlContainer, _validators:any[], _asyncValidators:any[])',
  'NgControlGroup.control:ControlGroup',
  'NgControlGroup.formDirective:Form',
  'NgControlGroup.ngOnDestroy():void',
  'NgControlGroup.ngOnInit():void',
  'NgControlGroup.path:string[]',
  'NgControlGroup.validator:ValidatorFn',
  'NgControlName',
  'NgControlName.asyncValidator:AsyncValidatorFn',
  'NgControlName.constructor(_parent:ControlContainer, _validators:any[], _asyncValidators:any[], valueAccessors:ControlValueAccessor[])',
  'NgControlName.control:Control',
  'NgControlName.formDirective:any',
  'NgControlName.model:any',
  'NgControlName.ngOnChanges(changes:{[key:string]:SimpleChange}):any',
  'NgControlName.ngOnDestroy():void',
  'NgControlName.path:string[]',
  'NgControlName.update:any',
  'NgControlName.validator:ValidatorFn',
  'NgControlName.viewModel:any',
  'NgControlName.viewToModelUpdate(newValue:any):void',
  'NgControlStatus',
  'NgControlStatus.constructor(cd:NgControl)',
  'NgControlStatus.ngClassDirty:boolean',
  'NgControlStatus.ngClassInvalid:boolean',
  'NgControlStatus.ngClassPristine:boolean',
  'NgControlStatus.ngClassTouched:boolean',
  'NgControlStatus.ngClassUntouched:boolean',
  'NgControlStatus.ngClassValid:boolean',
  'NgFor',
  'NgFor.constructor(_viewContainer:ViewContainerRef, _templateRef:TemplateRef, _iterableDiffers:IterableDiffers, _cdr:ChangeDetectorRef)',
  'NgFor.ngDoCheck():any',
  'NgFor.ngForOf=(value:any)',
  'NgFor.ngForTemplate=(value:TemplateRef)',
  'NgFor.ngForTrackBy=(value:TrackByFn)',
  'NgForm',
  'NgForm.addControl(dir:NgControl):void',
  'NgForm.addControlGroup(dir:NgControlGroup):void',
  'NgForm.constructor(validators:any[], asyncValidators:any[])',
  'NgForm.control:ControlGroup',
  'NgForm.controls:{[key:string]:AbstractControl}',
  'NgForm.form:ControlGroup',
  'NgForm.formDirective:Form',
  'NgForm.getControl(dir:NgControl):Control',
  'NgForm.getControlGroup(dir:NgControlGroup):ControlGroup',
  'NgForm.ngSubmit:any',
  'NgForm.onSubmit():boolean',
  'NgForm.path:string[]',
  'NgForm.removeControl(dir:NgControl):void',
  'NgForm.removeControlGroup(dir:NgControlGroup):void',
  'NgForm.updateModel(dir:NgControl, value:any):void',
  'NgFormControl',
  'NgFormControl.asyncValidator:AsyncValidatorFn',
  'NgFormControl.constructor(_validators:any[], _asyncValidators:any[], valueAccessors:ControlValueAccessor[])',
  'NgFormControl.control:Control',
  'NgFormControl.form:Control',
  'NgFormControl.model:any',
  'NgFormControl.ngOnChanges(changes:{[key:string]:SimpleChange}):void',
  'NgFormControl.path:string[]',
  'NgFormControl.update:any',
  'NgFormControl.validator:ValidatorFn',
  'NgFormControl.viewModel:any',
  'NgFormControl.viewToModelUpdate(newValue:any):void',
  'NgFormModel',
  'NgFormModel.addControl(dir:NgControl):void',
  'NgFormModel.addControlGroup(dir:NgControlGroup):any',
  'NgFormModel.constructor(_validators:any[], _asyncValidators:any[])',
  'NgFormModel.control:ControlGroup',
  'NgFormModel.directives:NgControl[]',
  'NgFormModel.form:ControlGroup',
  'NgFormModel.formDirective:Form',
  'NgFormModel.getControl(dir:NgControl):Control',
  'NgFormModel.getControlGroup(dir:NgControlGroup):ControlGroup',
  'NgFormModel.ngOnChanges(changes:{[key:string]:SimpleChange}):void',
  'NgFormModel.ngSubmit:any',
  'NgFormModel.onSubmit():boolean',
  'NgFormModel.path:string[]',
  'NgFormModel.removeControl(dir:NgControl):void',
  'NgFormModel.removeControlGroup(dir:NgControlGroup):any',
  'NgFormModel.updateModel(dir:NgControl, value:any):void',
  'NgIf',
  'NgIf.constructor(_viewContainer:ViewContainerRef, _templateRef:TemplateRef)',
  'NgIf.ngIf=(newCondition:any)',
  'NgLocalization',
  'NgLocalization.getPluralCategory(value:any):string',
  'NgModel',
  'NgModel.asyncValidator:AsyncValidatorFn',
  'NgModel.constructor(_validators:any[], _asyncValidators:any[], valueAccessors:ControlValueAccessor[])',
  'NgModel.control:Control',
  'NgModel.model:any',
  'NgModel.ngOnChanges(changes:{[key:string]:SimpleChange}):any',
  'NgModel.path:string[]',
  'NgModel.update:any',
  'NgModel.validator:ValidatorFn',
  'NgModel.viewModel:any',
  'NgModel.viewToModelUpdate(newValue:any):void',
  'NgPlural',
  'NgPlural.cases:QueryList<NgPluralCase>',
  'NgPlural.constructor(_localization:NgLocalization)',
  'NgPlural.ngAfterContentInit():any',
  'NgPluralCase.constructor(value:string, template:TemplateRef, viewContainer:ViewContainerRef)',
  'NgPlural.ngPlural=(value:number)',
  'NgPluralCase',
  'NgSelectOption',
  'NgStyle',
  'NgStyle.constructor(_differs:KeyValueDiffers, _ngEl:ElementRef, _renderer:Renderer)',
  'NgStyle.ngDoCheck():any',
  'NgStyle.rawStyle=(v:{[key:string]:string})',
  'NgSwitch',
  'NgSwitch.ngSwitch=(value:any)',
  'NgSwitchDefault',
  'NgSwitchDefault.constructor(viewContainer:ViewContainerRef, templateRef:TemplateRef, sswitch:NgSwitch)',
  'NgSwitchWhen',
  'NgSwitchWhen.constructor(viewContainer:ViewContainerRef, templateRef:TemplateRef, ngSwitch:NgSwitch)',
  'NgSwitchWhen.ngSwitchWhen=(value:any)',
  'NumberPipe',
  'PatternValidator',
  'PatternValidator.constructor(pattern:string)',
  'PatternValidator.validate(c:AbstractControl):{[key:string]:any}',
  'PercentPipe',
  'PercentPipe.transform(value:any, args:any[]):string',
  'ReplacePipe',
  'ReplacePipe.transform(value:any, args:any[]):any',
  'RequiredValidator',
  'SelectControlValueAccessor',
  'SelectControlValueAccessor.constructor(_renderer:Renderer, _elementRef:ElementRef, query:QueryList<NgSelectOption>)',
  'SelectControlValueAccessor.onChange:any',
  'SelectControlValueAccessor.onTouched:any',
  'SelectControlValueAccessor.registerOnChange(fn:() => any):void',
  'SelectControlValueAccessor.registerOnTouched(fn:() => any):void',
  'SelectControlValueAccessor.value:string',
  'SelectControlValueAccessor.writeValue(value:any):void',
  'SlicePipe',
  'SlicePipe.transform(value:any, args:any[]):any',
  'UpperCasePipe',
  'UpperCasePipe.transform(value:string, args:any[]):string',
  'Validator',
  'Validator.validate(c:AbstractControl):{[key:string]:any}',
  'Validators',
  'Validators.compose(validators:ValidatorFn[]):ValidatorFn',
  'Validators.composeAsync(validators:AsyncValidatorFn[]):AsyncValidatorFn',
  'Validators.maxLength(maxLength:number):ValidatorFn',
  'Validators.minLength(minLength:number):ValidatorFn',
  'Validators.nullValidator(c:AbstractControl):{[key:string]:boolean}',
  'Validators.pattern(pattern:string):ValidatorFn',
  'Validators.required(control:AbstractControl):{[key:string]:boolean}',
  'RadioButtonState',
  'RadioButtonState.constructor(checked:boolean, value:string)',
  'const COMMON_DIRECTIVES:Type[][]',
  'const COMMON_PIPES:any',
  'const CORE_DIRECTIVES:Type[]',
  'const FORM_BINDINGS:any',
  'const FORM_DIRECTIVES:Type[]',
  'const FORM_PROVIDERS:Type[]',
  'const NG_ASYNC_VALIDATORS:OpaqueToken',
  'const NG_VALIDATORS:OpaqueToken',
  'const NG_VALUE_ACCESSOR:OpaqueToken',
  'var workaround_empty_observable_list_diff:any'
];

const COMPILER = [
  'AttrAst',
  'AttrAst.constructor(name:string, value:string, sourceSpan:ParseSourceSpan)',
  'AttrAst.visit(visitor:TemplateAstVisitor, context:any):any',
  'BoundDirectivePropertyAst',
  'BoundDirectivePropertyAst.constructor(directiveName:string, templateName:string, value:AST, sourceSpan:ParseSourceSpan)',
  'BoundDirectivePropertyAst.visit(visitor:TemplateAstVisitor, context:any):any',
  'BoundElementPropertyAst',
  'BoundElementPropertyAst.constructor(name:string, type:PropertyBindingType, value:AST, unit:string, sourceSpan:ParseSourceSpan)',
  'BoundElementPropertyAst.visit(visitor:TemplateAstVisitor, context:any):any',
  'BoundEventAst',
  'BoundEventAst.constructor(name:string, target:string, handler:AST, sourceSpan:ParseSourceSpan)',
  'BoundEventAst.fullName:any',
  'BoundEventAst.visit(visitor:TemplateAstVisitor, context:any):any',
  'BoundTextAst',
  'BoundTextAst.constructor(value:AST, ngContentIndex:number, sourceSpan:ParseSourceSpan)',
  'BoundTextAst.visit(visitor:TemplateAstVisitor, context:any):any',
  'CompileDirectiveMetadata',
  'CompileDirectiveMetadata.changeDetection:ChangeDetectionStrategy',
  'CompileDirectiveMetadata.constructor({type,isComponent,dynamicLoadable,selector,exportAs,changeDetection,inputs,outputs,hostListeners,hostProperties,hostAttributes,lifecycleHooks,providers,viewProviders,queries,viewQueries,template}:{type?:CompileTypeMetadata, isComponent?:boolean, dynamicLoadable?:boolean, selector?:string, exportAs?:string, changeDetection?:ChangeDetectionStrategy, inputs?:{[key:string]:string}, outputs?:{[key:string]:string}, hostListeners?:{[key:string]:string}, hostProperties?:{[key:string]:string}, hostAttributes?:{[key:string]:string}, lifecycleHooks?:LifecycleHooks[], providers?:Array<CompileProviderMetadata|CompileTypeMetadata|any[]>, viewProviders?:Array<CompileProviderMetadata|CompileTypeMetadata|any[]>, queries?:CompileQueryMetadata[], viewQueries?:CompileQueryMetadata[], template?:CompileTemplateMetadata})',
  'CompileDirectiveMetadata.create({type,isComponent,dynamicLoadable,selector,exportAs,changeDetection,inputs,outputs,host,lifecycleHooks,providers,viewProviders,queries,viewQueries,template}:{type?:CompileTypeMetadata, isComponent?:boolean, dynamicLoadable?:boolean, selector?:string, exportAs?:string, changeDetection?:ChangeDetectionStrategy, inputs?:string[], outputs?:string[], host?:{[key:string]:string}, lifecycleHooks?:LifecycleHooks[], providers?:Array<CompileProviderMetadata|CompileTypeMetadata|any[]>, viewProviders?:Array<CompileProviderMetadata|CompileTypeMetadata|any[]>, queries?:CompileQueryMetadata[], viewQueries?:CompileQueryMetadata[], template?:CompileTemplateMetadata}):CompileDirectiveMetadata',
  'CompileDirectiveMetadata.providers:Array<CompileProviderMetadata|CompileTypeMetadata|any[]>',
  'CompileDirectiveMetadata.queries:CompileQueryMetadata[]',
  'CompileDirectiveMetadata.viewProviders:Array<CompileProviderMetadata|CompileTypeMetadata|any[]>',
  'CompileDirectiveMetadata.viewQueries:CompileQueryMetadata[]',
  'CompileDirectiveMetadata.dynamicLoadable:boolean',
  'CompileDirectiveMetadata.exportAs:string',
  'CompileDirectiveMetadata.fromJson(data:{[key:string]:any}):CompileDirectiveMetadata',
  'CompileDirectiveMetadata.hostAttributes:{[key:string]:string}',
  'CompileDirectiveMetadata.hostListeners:{[key:string]:string}',
  'CompileDirectiveMetadata.hostProperties:{[key:string]:string}',
  'CompileDirectiveMetadata.inputs:{[key:string]:string}',
  'CompileDirectiveMetadata.isComponent:boolean',
  'CompileDirectiveMetadata.lifecycleHooks:LifecycleHooks[]',
  'CompileDirectiveMetadata.outputs:{[key:string]:string}',
  'CompileDirectiveMetadata.selector:string',
  'CompileDirectiveMetadata.template:CompileTemplateMetadata',
  'CompileDirectiveMetadata.toJson():{[key:string]:any}',
  'CompileDirectiveMetadata.type:CompileTypeMetadata',
  'CompileDirectiveMetadata.identifier:CompileIdentifierMetadata',
  'CompileTemplateMetadata',
  'CompileTemplateMetadata.constructor({encapsulation,template,templateUrl,styles,styleUrls,ngContentSelectors}:{encapsulation?:ViewEncapsulation, template?:string, templateUrl?:string, styles?:string[], styleUrls?:string[], ngContentSelectors?:string[]})',
  'CompileTemplateMetadata.encapsulation:ViewEncapsulation',
  'CompileTemplateMetadata.fromJson(data:{[key:string]:any}):CompileTemplateMetadata',
  'CompileTemplateMetadata.ngContentSelectors:string[]',
  'CompileTemplateMetadata.styleUrls:string[]',
  'CompileTemplateMetadata.styles:string[]',
  'CompileTemplateMetadata.template:string',
  'CompileTemplateMetadata.templateUrl:string',
  'CompileTemplateMetadata.toJson():{[key:string]:any}',
  'CompileTypeMetadata',
  'CompileTypeMetadata.constructor({runtime,name,moduleUrl,prefix,isHost,constConstructor,diDeps}:{runtime?:Type, name?:string, moduleUrl?:string, prefix?:string, isHost?:boolean, constConstructor?:boolean, diDeps?:CompileDiDependencyMetadata[]})',
  'CompileTypeMetadata.fromJson(data:{[key:string]:any}):CompileTypeMetadata',
  'CompileTypeMetadata.isHost:boolean',
  'CompileTypeMetadata.moduleUrl:string',
  'CompileTypeMetadata.name:string',
  'CompileTypeMetadata.runtime:Type',
  'CompileTypeMetadata.toJson():{[key:string]:any}',
  'CompileTypeMetadata.diDeps:CompileDiDependencyMetadata[]',
  'CompileTypeMetadata.prefix:string',
  'CompileTypeMetadata.constConstructor:boolean',
  'CompileTypeMetadata.identifier:CompileIdentifierMetadata',
  'CompileTypeMetadata.type:CompileTypeMetadata',
  'DirectiveAst',
  'DirectiveAst.constructor(directive:CompileDirectiveMetadata, inputs:BoundDirectivePropertyAst[], hostProperties:BoundElementPropertyAst[], hostEvents:BoundEventAst[], exportAsVars:VariableAst[], sourceSpan:ParseSourceSpan)',
  'DirectiveAst.visit(visitor:TemplateAstVisitor, context:any):any',
  'ElementAst',
  'ElementAst.constructor(name:string, attrs:AttrAst[], inputs:BoundElementPropertyAst[], outputs:BoundEventAst[], exportAsVars:VariableAst[], directives:DirectiveAst[], children:TemplateAst[], ngContentIndex:number, sourceSpan:ParseSourceSpan)',
  'ElementAst.getComponent():CompileDirectiveMetadata',
  'ElementAst.isBound():boolean',
  'ElementAst.visit(visitor:TemplateAstVisitor, context:any):any',
  'EmbeddedTemplateAst',
  'EmbeddedTemplateAst.constructor(attrs:AttrAst[], outputs:BoundEventAst[], vars:VariableAst[], directives:DirectiveAst[], children:TemplateAst[], ngContentIndex:number, sourceSpan:ParseSourceSpan)',
  'EmbeddedTemplateAst.visit(visitor:TemplateAstVisitor, context:any):any',
  'NgContentAst',
  'NgContentAst.constructor(index:number, ngContentIndex:number, sourceSpan:ParseSourceSpan)',
  'NgContentAst.visit(visitor:TemplateAstVisitor, context:any):any',
  'PropertyBindingType',
  'PropertyBindingType.Attribute',
  'PropertyBindingType.Class',
  'PropertyBindingType.Property',
  'PropertyBindingType.Style',
  'SourceModule',
  'SourceModule.constructor(moduleUrl:string, sourceWithModuleRefs:string)',
  'SourceModule.getSourceWithImports():SourceWithImports',
  'SourceModule.getSourceWithoutImports(sourceWithModuleRefs:string):string',
  'SourceWithImports',
  'SourceWithImports.constructor(source:string, imports:string[][])',
  'TemplateAst',
  'TemplateAst.sourceSpan:ParseSourceSpan',
  'TemplateAst.visit(visitor:TemplateAstVisitor, context:any):any',
  'TemplateAstVisitor',
  'TemplateAstVisitor.visitAttr(ast:AttrAst, context:any):any',
  'TemplateAstVisitor.visitBoundText(ast:BoundTextAst, context:any):any',
  'TemplateAstVisitor.visitDirective(ast:DirectiveAst, context:any):any',
  'TemplateAstVisitor.visitDirectiveProperty(ast:BoundDirectivePropertyAst, context:any):any',
  'TemplateAstVisitor.visitElement(ast:ElementAst, context:any):any',
  'TemplateAstVisitor.visitElementProperty(ast:BoundElementPropertyAst, context:any):any',
  'TemplateAstVisitor.visitEmbeddedTemplate(ast:EmbeddedTemplateAst, context:any):any',
  'TemplateAstVisitor.visitEvent(ast:BoundEventAst, context:any):any',
  'TemplateAstVisitor.visitNgContent(ast:NgContentAst, context:any):any',
  'TemplateAstVisitor.visitText(ast:TextAst, context:any):any',
  'TemplateAstVisitor.visitVariable(ast:VariableAst, context:any):any',
  'TemplateCompiler',
  'TemplateCompiler.clearCache():any',
  'TemplateCompiler.compileHostComponentRuntime(type:Type):Promise<HostViewFactory>',
  'TemplateCompiler.compileStylesheetCodeGen(stylesheetUrl:string, cssText:string):SourceModule[]',
  'TemplateCompiler.compileTemplatesCodeGen(components:NormalizedComponentWithViewDirectives[]):SourceModule',
  'TemplateCompiler.constructor(_runtimeMetadataResolver:RuntimeMetadataResolver, _templateNormalizer:TemplateNormalizer, _templateParser:TemplateParser, _styleCompiler:StyleCompiler, _cdCompiler:ChangeDetectionCompiler, _protoViewCompiler:ProtoViewCompiler, _viewCompiler:ViewCompiler, _resolvedMetadataCache:ResolvedMetadataCache, _genConfig:ChangeDetectorGenConfig)',
  'TemplateCompiler.normalizeDirectiveMetadata(directive:CompileDirectiveMetadata):Promise<CompileDirectiveMetadata>',
  'TextAst',
  'TextAst.constructor(value:string, ngContentIndex:number, sourceSpan:ParseSourceSpan)',
  'TextAst.visit(visitor:TemplateAstVisitor, context:any):any',
  'UrlResolver',
  'UrlResolver.constructor(packagePrefix:string)',
  'UrlResolver.resolve(baseUrl:string, url:string):string',
  'VariableAst',
  'VariableAst.constructor(name:string, value:string, sourceSpan:ParseSourceSpan)',
  'VariableAst.visit(visitor:TemplateAstVisitor, context:any):any',
  'XHR',
  'XHR.get(url:string):Promise<string>',
  'const COMPILER_PROVIDERS:Array<Type|Provider|any[]>',
  'const PLATFORM_DIRECTIVES:OpaqueToken',
  'const PLATFORM_PIPES:OpaqueToken',
  'const TEMPLATE_TRANSFORMS:any',
  'createWithoutPackagePrefix():UrlResolver',
  'getUrlScheme(url:string):string',
  'templateVisitAll(visitor:TemplateAstVisitor, asts:TemplateAst[], context:any):any[]',
  'var DEFAULT_PACKAGE_URL_PROVIDER:any'
];

const INSTRUMENTATION = [
  'WtfScopeFn',
  'var wtfCreateScope:(signature: string, flags?: any) => impl.WtfScopeFn',
  'var wtfEndTimeRange:(range: any) => void',
  'var wtfLeave:<T>(scope: any, returnValue?: T) => T',
  'var wtfStartTimeRange:(rangeType: string, action: string) => any'
];

const UPGRADE = [
  'UpgradeAdapter',
  'UpgradeAdapter.addProvider(provider:Type|Provider|any[]):void',
  'UpgradeAdapter.bootstrap(element:Element, modules:any[], config:IAngularBootstrapConfig):UpgradeAdapterRef',
  'UpgradeAdapter.downgradeNg2Component(type:Type):Function',
  'UpgradeAdapter.downgradeNg2Provider(token:any):Function',
  'UpgradeAdapter.upgradeNg1Component(name:string):Type',
  'UpgradeAdapter.upgradeNg1Provider(name:string, options:{asToken:any}):any',
  'UpgradeAdapterRef',
  'UpgradeAdapterRef.dispose():any',
  'UpgradeAdapterRef.ng1Injector:IInjectorService',
  'UpgradeAdapterRef.ng1RootScope:IRootScopeService',
  'UpgradeAdapterRef.ng2ApplicationRef:ApplicationRef',
  'UpgradeAdapterRef.ng2Injector:Injector',
  'UpgradeAdapterRef.ready(fn:(upgradeAdapterRef?: UpgradeAdapterRef) => void):any'
];

const BROWSER = [
  'AngularEntrypoint',
  'AngularEntrypoint.constructor(name:String)',
  'BrowserDomAdapter',
  'BrowserDomAdapter.addClass(element:any, className:string):any',
  'BrowserDomAdapter.adoptNode(node:Node):any',
  'BrowserDomAdapter.appendChild(el:any, node:any):any',
  'BrowserDomAdapter.attrToPropMap:any',
  'BrowserDomAdapter.attributeMap(element:any):Map<string, string>',
  'BrowserDomAdapter.cancelAnimationFrame(id:number):any',
  'BrowserDomAdapter.childNodes(el:any):Node[]',
  'BrowserDomAdapter.childNodesAsList(el:any):any[]',
  'BrowserDomAdapter.classList(element:any):any[]',
  'BrowserDomAdapter.clearNodes(el:any):any',
  'BrowserDomAdapter.clone(node:Node):Node',
  'BrowserDomAdapter.content(node:Node):Node',
  'BrowserDomAdapter.createComment(text:string):Comment',
  'BrowserDomAdapter.createElement(tagName:any, doc:any):HTMLElement',
  'BrowserDomAdapter.createElementNS(ns:any, tagName:any, doc:any):Element',
  'BrowserDomAdapter.createEvent(eventType:any):Event',
  'BrowserDomAdapter.createHtmlDocument():HTMLDocument',
  'BrowserDomAdapter.createMouseEvent(eventType:string):MouseEvent',
  'BrowserDomAdapter.createScriptTag(attrName:string, attrValue:string, doc:any):HTMLScriptElement',
  'BrowserDomAdapter.createShadowRoot(el:HTMLElement):DocumentFragment',
  'BrowserDomAdapter.createStyleElement(css:string, doc:any):HTMLStyleElement',
  'BrowserDomAdapter.createTemplate(html:any):HTMLElement',
  'BrowserDomAdapter.createTextNode(text:string, doc:any):Text',
  'BrowserDomAdapter.defaultDoc():HTMLDocument',
  'BrowserDomAdapter.dispatchEvent(el:any, evt:any):any',
  'BrowserDomAdapter.elementMatches(n:any, selector:string):boolean',
  'BrowserDomAdapter.firstChild(el:any):Node',
  'BrowserDomAdapter.getAttribute(element:any, attribute:string):string',
  'BrowserDomAdapter.getAttributeNS(element:any, ns:string, name:string):string',
  'BrowserDomAdapter.getBaseHref():string',
  'BrowserDomAdapter.getBoundingClientRect(el:any):any',
  'BrowserDomAdapter.getChecked(el:any):boolean',
  'BrowserDomAdapter.getComputedStyle(element:any):any',
  'BrowserDomAdapter.getData(element:any, name:string):string',
  'BrowserDomAdapter.getElementsByClassName(element:any, name:string):HTMLElement[]',
  'BrowserDomAdapter.getElementsByTagName(element:any, name:string):HTMLElement[]',
  'BrowserDomAdapter.getEventKey(event:any):string',
  'BrowserDomAdapter.getGlobalEventTarget(target:string):EventTarget',
  'BrowserDomAdapter.getHistory():History',
  'BrowserDomAdapter.getHost(el:HTMLElement):HTMLElement',
  'BrowserDomAdapter.getHref(el:Element):string',
  'BrowserDomAdapter.getInnerHTML(el:any):string',
  'BrowserDomAdapter.getLocation():Location',
  'BrowserDomAdapter.getOuterHTML(el:any):string',
  'BrowserDomAdapter.getProperty(el:any, name:string):any',
  'BrowserDomAdapter.getShadowRoot(el:HTMLElement):DocumentFragment',
  'BrowserDomAdapter.getStyle(element:any, stylename:string):string',
  'BrowserDomAdapter.getText(el:any):string',
  'BrowserDomAdapter.getTitle():string',
  'BrowserDomAdapter.getUserAgent():string',
  'BrowserDomAdapter.getValue(el:any):string',
  'BrowserDomAdapter.hasAttribute(element:any, attribute:string):boolean',
  'BrowserDomAdapter.hasAttributeNS(element:any, ns:string, attribute:string):boolean',
  'BrowserDomAdapter.hasClass(element:any, className:string):boolean',
  'BrowserDomAdapter.hasProperty(element:any, name:string):boolean',
  'BrowserDomAdapter.hasShadowRoot(node:any):boolean',
  'BrowserDomAdapter.hasStyle(element:any, styleName:string, styleValue:string):boolean',
  'BrowserDomAdapter.importIntoDoc(node:Node):any',
  'BrowserDomAdapter.insertAfter(el:any, node:any):any',
  'BrowserDomAdapter.insertAllBefore(el:any, nodes:any):any',
  'BrowserDomAdapter.insertBefore(el:any, node:any):any',
  'BrowserDomAdapter.invoke(el:any, methodName:string, args:any[]):any',
  'BrowserDomAdapter.isCommentNode(node:Node):boolean',
  'BrowserDomAdapter.isElementNode(node:Node):boolean',
  'BrowserDomAdapter.isPrevented(evt:Event):boolean',
  'BrowserDomAdapter.isShadowRoot(node:any):boolean',
  'BrowserDomAdapter.isTemplateElement(el:any):boolean',
  'BrowserDomAdapter.isTextNode(node:Node):boolean',
  'BrowserDomAdapter.log(error:any):any',
  'BrowserDomAdapter.logError(error:any):any',
  'BrowserDomAdapter.logGroup(error:any):any',
  'BrowserDomAdapter.logGroupEnd():any',
  'BrowserDomAdapter.makeCurrent():any',
  'BrowserDomAdapter.nextSibling(el:any):Node',
  'BrowserDomAdapter.nodeName(node:Node):string',
  'BrowserDomAdapter.nodeValue(node:Node):string',
  'BrowserDomAdapter.on(el:any, evt:any, listener:any):any',
  'BrowserDomAdapter.onAndCancel(el:any, evt:any, listener:any):Function',
  'BrowserDomAdapter.parentElement(el:any):Node',
  'BrowserDomAdapter.parse(templateHtml:string):any',
  'BrowserDomAdapter.performanceNow():number',
  'BrowserDomAdapter.preventDefault(evt:Event):any',
  'BrowserDomAdapter.query(selector:string):any',
  'BrowserDomAdapter.querySelector(el:any, selector:string):HTMLElement',
  'BrowserDomAdapter.querySelectorAll(el:any, selector:string):any[]',
  'BrowserDomAdapter.remove(node:any):Node',
  'BrowserDomAdapter.removeAttribute(element:any, attribute:string):any',
  'BrowserDomAdapter.removeAttributeNS(element:any, ns:string, name:string):any',
  'BrowserDomAdapter.removeChild(el:any, node:any):any',
  'BrowserDomAdapter.removeClass(element:any, className:string):any',
  'BrowserDomAdapter.removeStyle(element:any, stylename:string):any',
  'BrowserDomAdapter.replaceChild(el:Node, newChild:any, oldChild:any):any',
  'BrowserDomAdapter.requestAnimationFrame(callback:any):number',
  'BrowserDomAdapter.resetBaseElement():void',
  'BrowserDomAdapter.setAttribute(element:any, name:string, value:string):any',
  'BrowserDomAdapter.setAttributeNS(element:any, ns:string, name:string, value:string):any',
  'BrowserDomAdapter.setChecked(el:any, value:boolean):any',
  'BrowserDomAdapter.setData(element:any, name:string, value:string):any',
  'BrowserDomAdapter.setGlobalVar(path:string, value:any):any',
  'BrowserDomAdapter.setInnerHTML(el:any, value:any):any',
  'BrowserDomAdapter.setProperty(el:any, name:string, value:any):any',
  'BrowserDomAdapter.setStyle(element:any, styleName:string, styleValue:string):any',
  'BrowserDomAdapter.setText(el:any, value:string):any',
  'BrowserDomAdapter.setTitle(newTitle:string):any',
  'BrowserDomAdapter.setValue(el:any, value:string):any',
  'BrowserDomAdapter.tagName(element:any):string',
  'BrowserDomAdapter.templateAwareRoot(el:any):any',
  'BrowserDomAdapter.type(node:HTMLInputElement):string',
  'By',
  'By.all():Predicate<DebugElement>',
  'By.css(selector:string):Predicate<DebugElement>',
  'By.directive(type:Type):Predicate<DebugElement>',
  'Title',
  'Title.getTitle():string',
  'Title.setTitle(newTitle:string):any',
  'bootstrapStatic(appComponentType:Type, customProviders:Array<any>, initReflector:Function):Promise<ComponentRef>',
  'const BROWSER_APP_PROVIDERS:Array<any>',
  'const BROWSER_PROVIDERS:Array<any>',
  'const ELEMENT_PROBE_PROVIDERS:any[]',
  'const ELEMENT_PROBE_PROVIDERS_PROD_MODE:any[]',
  'disableDebugTools():void',
  'enableDebugTools(ref:ComponentRef):void',
  'inspectNativeElement(element:any):DebugNode'
];

describe('public API', () => {
  it("should check core.ts", () => { checkPublicApi("modules/angular2/core.ts", CORE); });
  it("should check common.ts", () => { checkPublicApi("modules/angular2/common.ts", COMMON); });
  it("should check compiler.ts",
     () => { checkPublicApi("modules/angular2/compiler.ts", COMPILER); });
  it("should check instrumentation.ts",
     () => { checkPublicApi("modules/angular2/instrumentation.ts", INSTRUMENTATION); });
  it("should check upgrade.ts", () => { checkPublicApi("modules/angular2/upgrade.ts", UPGRADE); });
  it("should check browser.ts",
     () => { checkPublicApi("modules/angular2/platform/browser_static.ts", BROWSER); });
});

function checkPublicApi(file: string, expected: string[]) {
  const sortedActual = publicApi(file).sort();
  const sortedExpected = expected.sort();
  const missing = sortedActual.filter((i) => sortedExpected.indexOf(i) < 0).map(s => `+${s}`);
  const extra = sortedExpected.filter((i) => sortedActual.indexOf(i) < 0).map(s => `-${s}`);
  expect(missing.concat(extra)).toEqual([]);
}
